package com.spring.gll.fileuplodedown;

import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Controller
@RequestMapping("/fileUplode")
public class FileUplode {
    @RequestMapping("/view")
    public String view(){
        return "UplodeDownlode";
    }

    @RequestMapping("/uplode")
    public String uplode(MultipartFile file) throws Exception {
        /*上传路径*/
        String path = "E:/";
        String originalFilename = file.getOriginalFilename();
//         \\. 分割点
//        获取文件后缀名
        String last = originalFilename.split("\\.")[originalFilename.split("\\.").length - 1];
//        文件命名 根据时间
//        String sjc = DateUtil.sjc();
//        随机生成字符
//        UUID.randomUUID().toString().replace("-", "")  转换成字符串 将其中的-换为null
        String replace = UUID.randomUUID().toString().replace("-", "");
//        拼接上传名称
//        String fileName=sjc+"."+last;
        String fileName=replace+"."+last;
        file.transferTo(new File(path,fileName));
        return "Success";
    }



    @RequestMapping("/uplode1")
    public ModelAndView uplode1(@RequestParam("file") MultipartFile file)throws IOException {
        String strFileName="";
        //判断是否上传文件
        if(file.isEmpty()){
            System.out.println("未上传文件");
        }else{
            //获取上传文件的属性
            System.out.println("文件大小"+file.getSize());
            System.out.println("文件类型"+file.getContentType());
            System.out.println("文件名称"+file.getName());
            System.out.println("文件原名"+file.getOriginalFilename());
            System.out.println("===========================================");

            //文件上传路径
            String upDir="E:/";
            //获取文件原名
            String fullName=file.getOriginalFilename();
            //获取扩展名称
            String ext=fullName.substring(fullName.lastIndexOf('.'));
            //拼接文件保存的名称
//            System.nanoTime() 方法执行时间计算之类
            String FileName=System.nanoTime()+ext;

            //保存文件
            FileUtils.writeByteArrayToFile(new File(upDir, FileName), file.getBytes());

            System.out.println("保存的文件名称为："+FileName);
            strFileName=FileName;
        }
        //路径为/WEB-INF/jsp/fileDemo/uploadSuccess
        ModelAndView mv=new ModelAndView("/Success");//由于在spring-mvc配置文件中配置了对模型视图名称的解析，所以这里路径可以简写，具体配置见下文详细代码。
        mv.addObject("fileName", strFileName);
        return mv;
    }
    


    @RequestMapping("/downlode")
    public String download(@RequestParam("file") String fileName) throws IOException {
        //文件上传路径
        String upDir="E:/";
        //获取文件
        File file = new File(upDir,fileName);
        //设置header
        HttpHeaders headers = new HttpHeaders();
        //application/octet-stream二进制流数据（最常见的文件下载）
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        //通知浏览器以attachment（下载方式） 下载文件，文件名称为指定名称
        headers.setContentDispositionFormData("attachment", fileName);
        //返回文件下载相关参数
        return "Success";
    }
}
